package adapter

import (
	"slices"
	"strings"
)

// Target 定义客户端使用的接口，与特定领域相关
type Target interface {
	// Request 示意方法，客户端请求处理的方法
	Request() string
}

// Adaptee 已经存在的接口，这个接口需要被匹配
type Adaptee struct {
}

// 示意方法，原本已经存在，已经实现的方法
func (a *Adaptee) specificRequest(str string) string {
	// 具体功能处理
	return str + " Adaptee"
}

// Adapter 适配器
type Adapter struct {
	// 持有需要被适配的接口对象
	Ade *Adaptee
}

// NewAdapter 构造方法，传入需要被适配的对象
func NewAdapter(adaptee *Adaptee) *Adapter {
	return &Adapter{
		Ade: adaptee,
	}
}

func (a *Adapter) Request(str string) []string {
	// 可能转调已经实现的了的方法，进行适配
	str = a.Ade.specificRequest(str)
	// 此示例中，被适配的入参出参都是string，客户端需要的接口入参是string，出参都是[]string
	str = strings.TrimSpace(str)
	strs := strings.Split(str, " ")
	slices.Reverse(strs)
	return strs
}
